package com.link_with_health.service;

import com.link_with_health.exception.BaseException;
import com.link_with_health.model.UserEntity;
import com.link_with_health.model.UserStatusEntity;

import java.util.List;

public interface UserService {

    /**
     * 通过用户id获取用户信息
     * @param userId 用户id
     * @return 用户信息
     * @throws BaseException 异常
     */
    UserEntity getUserByUserId(Long userId) throws BaseException;

    /**
     * 通过邮箱获取用户信息
     * @param email 邮箱信息
     * @return 用户信息
     * @throws BaseException 异常
     */
    UserEntity getUserByEmail(String email) throws BaseException;

    /**
     * 通过用户名字获取用户信息
     * @param  username 用户名字
     * @return 用户信息
     * @throws BaseException 异常
     */
    UserEntity getUserByUsername(String username) throws BaseException;

    /**
     * 通过手机信息获取用户信息
     * @param phone 手机号码
     * @return 用户信息
     * @throws BaseException 异常
     */
    UserEntity getUserByPhone(String phone) throws BaseException;;

    /**
     * 获取对应状态的所有用户
     * @param status 用户状态
     * @return 用户信息
     * @throws BaseException 异常
     */
    List<UserEntity> getUserByStatus(int status) throws BaseException;;


    /**
     * 获取所有用户信息
     * @return 用户信息
     * @throws BaseException 异常
     */
    List<UserEntity> getAllUsers() throws BaseException;;

    /**
     * 添加用户信息
     * @param user 用户信息
     * @return 改动数量
     * @throws BaseException 异常
     */
    int addUser(UserEntity user) throws BaseException;;

    /**
     * 更改用户信息
     * @param user 用户信息
     * @return 改动数量
     * @throws BaseException 异常
     */
    int changeUser(UserEntity user) throws BaseException;;

    /**
     * 删除用户
     * 不建议使用该方法删除
     * @param user 用户信息
     * @return 改动数量
     * @throws BaseException 异常
     */
    int deleteUser(UserEntity user) throws BaseException;;

    /**
     * 通过用户状态id查找状态信息
     * @param id 用户状态信息
     * @return 状态信息
     * @throws BaseException 异常
     */
    UserStatusEntity getUserStatusById(Integer id) throws BaseException;;

    /**
     * 通过用户id获取用户状态
     * @param userId 用户id
     * @return 状态信息
     * @throws BaseException 异常
     */
    UserStatusEntity getUserStatusByUser(Long userId) throws BaseException;;

    /**
     * 获取所有状态
     * @return 状态信息
     * @throws BaseException 异常
     */
    List<UserStatusEntity> getAllUserStatus() throws BaseException;;

    /**
     * 添加状态信息
     * @param status 状态信息
     * @return 改动数量
     * @throws BaseException 异常
     */
    int addUserStatus(UserStatusEntity status) throws BaseException;;

    /**
     * 改动状态信息
     * @param status 状态信息
     * @return 改动数量
     * @throws BaseException 异常
     */
    int changeUserStatus(UserStatusEntity status) throws BaseException;;

    /**
     * 删除状态信息
     * 当有用户处于该状态时 无法删除状态信息
     * @param statusId  状态id
     * @return 改动数量
     * @throws BaseException 异常
     */
    int deleteAdminUserById(int statusId) throws BaseException;;

    /**
     * 查看该状态信息是否可以访问
     * @param status 状态信息
     * @return 判断结果
     */
    boolean isInvalidStatus(int status);
}
